Object-oriented languages or systems are generally based upon the notion of a class which is an entity permitting the generation and manipulation of objects. A class defines, on the one hand, the structure of the objects which it is going to generate via the definition of attributes and, on the other, the behavior of these objects by means of the definition of the methods. Furthermore, the possibility of defining an inheritance relationship between various classes is an essential characteristic of languages of this type, this relationship being able to be and being generally a multiple inheritance relationship.
Multiple inheritance means that the same class is defined by inheritance from several other classes. Remember, a class which inherits from another class is commonly called a "derived class", the class inherited from then being considered a "base class" of the derived class. Likewise, two components are currently distinguished in the inheritance relationship with regard to the notion of class. A first component concerns structural inheritance: the structure of an object of a given class is composed of attributes defined in this class as well as the total group of attributes of the classes inherited directly or indirectly. The second component relates to behavioral inheritance: the methods permitting the manipulation of an object are those defined in its class as well as all those defined in the classes inherited directly or indirectly. Added to this aspect is generally the possibility of overloading a derived class with the code of a method defined in a base class. This function then requires a mechanism of dynamic linkage to the execution, called "late binding" by the man of art.
When such an object-oriented language (for example, C++) is compiled, the compiler must define the storage location of the objects in memory as well as the addressing of the attributes and associated methods. The management of the multiple inheritance of objects becomes complicated rather quickly and poses problems; but in the case of nonpersistent objects there is an effective technique, implemented with the C++ language, which permits the resolution of the problems posed by multiple inheritance. This technique is described by M. A. Ellis and B. Stroustrup in The Annotated C++ Reference Manual, Addison-Wesley, 1990.
Unfortunately, this technique presents a major inconvenience, because it becomes ineffective and thus useless where there is a need to apply it in the case of objects which are persistent (objects which survive when the execution of the program which produced them comes to an end) and shared (several programs access a single object simultaneously).
The purpose of the present invention is to provide a solution to the problems cited above and to propose a process for the management of multiple inheritance which can be utilized easily and effectively in a system or by the code generator of a language employing persistent and shared objects.